﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.NetworkInformation;
using IrendilDLL.Database;
using System.Configuration;
using System.Data;
using IrendilDLL;
using System.Text;
using System.IO;
using IrendilDLL.PageControls;
using IrendilDLL.utilities;
using AjaxControlToolkit;
using Irendil.controls;

namespace Irendil
{
    public partial class Server : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            try
            {
            // Procedo solo se é correttamente inizializzata la variabile di sessione
            String installationGUID = (String)Session["installationGUID"];
            if (installationGUID != "" || installationGUID != String.Empty)
            {
                // Recupero le informazioni relativa al nodo dell'installazione selezionato
                List<InstallationNode> installationNodeList = (List<InstallationNode>)Session["installationNodeList"];
                InstallationNode installationNodeActive = null;
                foreach (InstallationNode installationNode in installationNodeList)
                {
                    if (installationNode.GUID == installationGUID)
                        installationNodeActive = installationNode;
                }
                // Se come devo trovo il nodo attivo vado avanti
                if (installationNodeActive != null)
                {
                    try 
                    {

                        System.Web.UI.WebControls.Label labelMessageOut = (System.Web.UI.WebControls.Label)Master.Master.FindControl("LabelMessageOut");
                        labelMessageOut.Text = "Connesso a <b>" + installationNodeActive.Description+"</b>";

                        // Istanzio la classe di controllo della pagina
                        ServerControl serverControl = new ServerControl();
                        DataTable serverViewDt = serverControl.getPingDT();

                        //// Salvo i dati in cache per evitare troppi round-trip su DB
                        //Cache["DataTable"] = serverViewDt;
                        // Faccio il bind con la gridView
                        serverGridView.DataSource = serverViewDt;
                        serverGridView.DataBind();

                    }
                    catch (Exception ex)
                    {
                        //// Onde evitare di perdere eccezioni riscivo l'errore su file anche se creo duplicati
                        // Istanzio la classe di gestione dell'errore
                        LogErrors logError = new LogErrors();
                        // Scrivo l'errore su file
                        logError.WriteLogToFile(ex.Source+": "+ex.Message);
                        // Visualizzo la finestra di errore
                        ((ModalPopupExtender)Master.Master.FindControl("ModalPopupExtender")).Show();

                    }
                }
 
            
            }

            }
            catch (Exception ex)
            {
                //// Onde evitare di perdere eccezioni riscivo l'errore su file anche se creo duplicati
                // Istanzio la classe di gestione dell'errore
                LogErrors logError = new LogErrors();
                // Scrivo l'errore su file
                logError.WriteLogToFile(ex.Source+": "+ex.Message);
                // In caso di sessione scaduta o altro redirigo alla pagina di login
                Response.Redirect("~//Logout.aspx");
            }

        }

        /// <summary>
        /// Evento associato alla pressione del tasto search
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        //protected void searchButton_Click(object sender, EventArgs e)
        //{
        //    // Ottengo il riferimento a filterBar
        //    filterBar filterBar = (filterBar)Master.Master.FindControl("ContentPlaceHolder").FindControl("filterBar");
        //    // Ottengo la stringa di connessione al db
        //    string localSqlServerStr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
        //    // Ottengo e visualizzo gli eventi prelevati da DB
        //    getAndViewDbData(filterBar, localSqlServerStr);
        //}

        /// <summary>
        /// Evento associato alla pressione del tasto refresh
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void refreshButton_Click(object sender, EventArgs e)
        {
            //// Ottengo il riferimento a filterBar
            //filterBar filterBar = (filterBar)Master.Master.FindControl("ContentPlaceHolder").FindControl("filterBar");
            //// Ottengo la stringa di connessione al db
            //string localSqlServerStr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
            //// Ottengo e visualizzo gli eventi prelevati da DB
            //getAndViewDbData(filterBar, localSqlServerStr);
        }


        /// <summary>
        /// Evento associato al cambio pagina nella gridview
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void serverGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            //// Imposto il nuovo valore di pagina
            //serverGridView.PageIndex = e.NewPageIndex;
            //// Prelevo da cache il DT
            //serverGridView.DataSource = (DataTable)Cache["DataTable"];
            //// Effetto la visualizzazione dei dati
            //serverGridView.DataBind();

            // Istanzio la classe di controllo della pagina
            ServerControl serverControl = new ServerControl();
            DataTable serverViewDt = serverControl.getPingDT();
            serverGridView.DataSource = serverViewDt;
            serverGridView.DataBind();
        }

        /// <summary>
        /// Evento associato all'aggiunta di una riga nella tabella
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void diskGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                // Intercetto solo l'evento di scrittura riga
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    // TRUCCO: per evitare di dovermi riferire alle colonne con Cell[x] con x intero
                    // ma con il nome della colonna (più robusto) uno una coversione ad un datarow
                    DataRow dr = ((DataRowView)e.Row.DataItem).Row;

                    // ATTENZIONE NON E ROBUSTO IN CASO SI CAMBI COLONNE SU DB
                    if (dr["Esito"].ToString() == "NO")
                        e.Row.CssClass = "GridView_RowStyleAlert";

                }
            }
            catch (Exception ex)
            {
                //// Onde evitare di perdere eccezioni riscivo l'errore su file anche se creo duplicati
                // Istanzio la classe di gestione dell'errore
                LogErrors logError = new LogErrors();
                // Scrivo l'errore su file
                logError.WriteLogToFile(ex.Source+": "+ex.Message);
                // Visualizzo la finestra di errore
                ((ModalPopupExtender)Master.Master.FindControl("ModalPopupExtender")).Show();
            }

        }

    }
}